/**
 * 
 */
package join.web.controller;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import join.model.beans.Proyecto;
import join.model.beans.ProyectoParticipante;
import join.model.beans.ProyectoRiesgo;
import join.model.repositories.ProyectoParticipanteRepository;
import join.model.repositories.ProyectoRepository;
import join.model.repositories.ProyectoRiesgoRepository;
import join.util.AppListUtil;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author Cesar Rodriguez
 *
 */

@Controller
@RequestMapping("/proyecto/{idProyecto}/riesgo")
public class ProyectoRiesgoController {
	@Autowired
	ProyectoRepository proyectoRepo;
	
	@Autowired
	ProyectoRiesgoRepository proyectoRiesgoRepo;
	
	@Autowired
	ProyectoParticipanteRepository proyectoParticipanteRepo;

	
	@RequestMapping(value = "/list", method = RequestMethod.GET)
	public ModelAndView lst(HttpServletRequest request,
			HttpServletResponse response,  @PathVariable Long idProyecto) throws Exception {
		
		Proyecto p = proyectoRepo.findOne(idProyecto);
		List<ProyectoRiesgo> lp = (List<ProyectoRiesgo>) proyectoRiesgoRepo.findByProyecto(idProyecto);
		
		Map<String, Object> model = new HashMap<String, Object>();
		model.put("proyecto", p);
		model.put("list", lp);

		return new ModelAndView("project/proyectoRiesgoLst", "model", model);
	}
	
	@RequestMapping(value = "/preload", method = RequestMethod.GET)
	public ModelAndView preload(ModelMap model, @PathVariable Long idProyecto){
		ProyectoRiesgo proyectoRiesgo = new ProyectoRiesgo();
		
		Proyecto p = proyectoRepo.findOne(idProyecto);
		proyectoRiesgo.setProyecto(idProyecto);
		
		//Objetos Principales
		model.put("proyecto", p);
		model.put("proyectoRiesgo", proyectoRiesgo);
		
		//Listas
		model.put("lpEstado", AppListUtil.getLista("proyectoRiesgoEstado"));
		model.put("lpCategoria", AppListUtil.getLista("proyectoRiesgoCategoria"));
		model.put("lpTipo", AppListUtil.getLista("proyectoRiesgoTipo"));
		
		//Responsables
		List<ProyectoParticipante> participantes = proyectoParticipanteRepo.findByProyecto(idProyecto);
		Map<String, String> mapResponsables = new LinkedHashMap<String, String>();
		for(ProyectoParticipante par:participantes){
			mapResponsables.put(par.getId().toString(),par.getNombre());
		}
		model.put("lpResponsables", mapResponsables);		

		return new ModelAndView("project/proyectoRiesgoAdm", "model", model);
	}
	
	@RequestMapping(value = "/save", method = RequestMethod.POST)
	public ModelAndView save(@ModelAttribute("proyectoRiesgo") ProyectoRiesgo nuevoRiesgo,  
			ModelMap model, HttpServletRequest request,
			HttpServletResponse response, @PathVariable Long idProyecto) throws Exception{
		
		nuevoRiesgo.setProyecto(idProyecto);
		proyectoRiesgoRepo.save(nuevoRiesgo);
		
		return lst(request, response, idProyecto);
	}
	

	@RequestMapping(value = "/{proyectoRiesgoId}/load", method = RequestMethod.GET)
	public ModelAndView load(ModelMap model, @PathVariable Long idProyecto, @PathVariable Long proyectoRiesgoId){
		Proyecto p = proyectoRepo.findOne(idProyecto);
		ProyectoRiesgo proyectoRiesgo = proyectoRiesgoRepo.findOne(proyectoRiesgoId);
		
		//Objetos Principales
		model.put("proyecto", p);
		model.put("proyectoRiesgo", proyectoRiesgo);
		
		//Listas
		model.put("lpEstado", AppListUtil.getLista("proyectoRiesgoEstado"));
		model.put("lpCategoria", AppListUtil.getLista("proyectoRiesgoCategoria"));
		model.put("lpTipo", AppListUtil.getLista("proyectoRiesgoTipo"));
		
		//Responsables
		List<ProyectoParticipante> participantes = proyectoParticipanteRepo.findByProyecto(idProyecto);
		Map<String, String> mapResponsables = new LinkedHashMap<String, String>();
		for(ProyectoParticipante par:participantes){
			mapResponsables.put(par.getId().toString(),par.getNombre());
		}
		model.put("lpResponsables", mapResponsables);		

		return new ModelAndView("project/proyectoRiesgoAdm", "model", model);
	}
	
}
